perm filename GRAPHS.LST[HAL,HE] blob sn#156802 filedate 1975-04-29 generic text, type T, neo UTF8
	PALX 222	04/29/75  10:55:58	PAGE 1
	GRAPHS PAL[HAL,HE]	PAGE 5 	Graph routines

INVL.R+2	132	5	2			   	.ERROR Multiple definition for ND
	PALX 222	04/29/75  10:55:58	PAGE 2
	GRAPHS PAL[HAL,HE]	PAGE 6 	Graph routines

CRTS+2	240	6	2			   	.ERROR Multiple definition for ND
	PALX 222	04/29/75  10:55:58	PAGE 3
	GRAPHS PAL[HAL,HE]	PAGE 7 	Graph routines

GETV.R+6	316	7	2			   	.ERROR Multiple definition for ND
EV.RTS+2	472	7	31			   	.ERROR Multiple definition for CLC
	PALX 222	04/29/75  10:55:58	PAGE 4
	GRAPHS PAL[HAL,HE]	PAGE 8 	Graph routines

EVLCLC+2	474	8	2			   	.ERROR Multiple definition for ND
EVLCLC+2	474	8	2			   	.ERROR Multiple definition for CLC
	PALX 222	04/29/75  10:55:58	PAGE 5
	GRAPHS PAL[HAL,HE]	PAGE 9 	Graph routines

W2SPC	566	9	3	CONSECUTIVE TERMS
	000566	000000			W2SPC:	SPC	W2ID,MP2WD,2,20,1,20,25
W3SPC		570	9	4	CONSECUTIVE TERMS
	000570	000000			W3SPC:	SPC	W3ID,MP3WD,3,20,1,20,25
GET3WD+10	722	9	37	NO END STMT
	PALX 222	04/29/75  10:55:58	PAGE 6
	HALHED PAL[HAL,HE]	PAGE 1 	

				COMMENT ⊗   VALID 00004 PAGES
				C REC  PAGE   DESCRIPTION
				C00001 00001
				C00002 00002	.SBTTL  ASSEMBLY FLAGS
				C00005 00003	routine calling and defining macros.
				C00008 00004	macros for handling tables & blocks
				C00014 ENDMK
					C⊗;
	PALX 222	04/29/75  10:55:58	PAGE 7
	HALHED PAL[HAL,HE]	PAGE 2 	ASSEMBLY FLAGS

					.SBTTL  ASSEMBLY FLAGS
					
					;This macro gives the switch SW a default value VAL
					       .MACRO STSW SW,VAL
					       .IFNDF SW
						SW == VAL   ;if do not have a value already, give it one
					       .ENDC
					       .ENDM
					
						STSW  FLOAT,1	;0 => no floating point capacity
					       .IFNDF FLOAT
						FLOAT == 1   ;if do not have a value already, give it one
					       .ENDC
					
					.SBTTL	DEFS -- standard definitions for HAL runtime routines
					
					; PROGRAM DEFINITIONS
					
		000004			ERRTRP==4		;time out and error trap
		000010			ILGINS==10		;illegal instruction
		000104			CLKTRP==104		;clock trap
		050000			RUG=50000		;Restart of RUG
		177776			PS=177776		;processor status word
		177560			KBIS=177560		;keyboard input status
		177562			KBIR=177562		;keyboard input register
		177564			KBOS=177564		;keyboard output status
		177566			KBOR=177566		;keyboard output register
		172544			CLKCNT=172544		;clock counter
		172542			CLKSET=172542		;clock set register
		172540			CLKS=172540		;clock status
					
		000500			STRT11=500		;starting address of program
		000150			IBUF==150		;start of input buffer from 11
		000160			OBUF==160		;start of output buffer to 11 
		077776			HCOR=77776		;highest useable word in core
					
					
					;REGISTER DEFINITIONS
					
		000007			PC=%7			;program counter
		000006			SP=%6			;stack pointer
		000005			RF==%5			;Display pointer
		000005			R5=%5
		000004			R4=%4			;Saved across procedure calls
		000003			R3=%3			;Saved across procedure calls
		000002			R2=%2			;Saved across procedure calls
		000001			R1=%1			;temp
		000000			R0=%0			;temp
		000005			AC5==%5			;Temp Floating point register
	PALX 222	04/29/75  10:55:58	PAGE 8
	HALHED PAL[HAL,HE]	PAGE 2.1 	DEFS -- standard definitions for HAL runtime routines

		000004			AC4==%4			; "      "       "      "
		000003			AC3==%3			; "      "       "      "
		000002			AC2==%2			; "      "       "      "
		000001			AC1==%1			; "      "       "      "
		000000			AC0==%0			; "      "       "      "
					
					;MARK DEFINITIONS
		006400			MARK0 == 6400		;MARK 0
		006401			MARK1 == 6401		;MARK 1
		006402			MARK2 == 6402		;ETC.
		006403			MARK3 == 6403
		006404			MARK4 == 6404
		006405			MARK5 == 6405
					
	PALX 222	04/29/75  10:55:58	PAGE 9
	HALHED PAL[HAL,HE]	PAGE 3 	DEFS -- standard definitions for HAL runtime routines

					;routine calling and defining macros.
					;Coded by RHT 9/74.
					
					;This should be used at the start of routines which reference
					;	parameters off the RF stack.  It gives the parameters
					;	symbolic names for clarity of coding.
					;For example,
					;
					;	ROUTINE FOO,<A,B>
					;
					;Goes to
					;
					;	A==4
					;	B==2
					;FOO:
					
					       .MACRO ROUTINE ID,ARGS
					           .IFNB ARGS
						    NNNN==0
						       .IRP II,<ARGS>		;Raise NNNN to twice the number of args.
							NNNN==NNNN+2
						       .ENDM
						       .IRP II,<ARGS>		;Assign each arg NNNN and decrease same.
							.IFDF II
							   .IF1 
							   	.ERROR Multiple definition for II
							   .ENDC
							.IFF
							    II == NNNN
							    NNNN == NNNN-2
							.ENDC
						       .ENDM
						   .ENDC
					ID:
					       .ENDM
					
					;This is useful in calling rountines which reference parameters off
					;	the RF stack.  It sets up the stack properly, but does not
					;	save R0 or R1.
					
					       .MACRO CALL ID,ARGS
						MOV	RF,-(SP)	;Save RF
						NNNN == 6400		;This is a MARK 0 instruction
						   .IFNB ARGS
						       .IRP II,<ARGS>
							MOV	II,-(SP);Push an argument
							NNNN == NNNN+1	;Make NNNN the next MARK instruction.
						       .ENDM
						   .ENDC
	PALX 222	04/29/75  10:55:58	PAGE 10
	HALHED PAL[HAL,HE]	PAGE 3.1 	DEFS -- standard definitions for HAL runtime routines

						MOV	#NNNN,-(SP)	;Push the mark instruction.
						MOV	SP,RF		;Set up the display in RF.
						JSR	PC,ID		;Call the routine
					       .ENDM
					
					
					;This macro is a temporary(ha,ha) method of defining floating point
					;constants. LABIL is the constant name and MSB and LSB its two
					;16 bit octal parts.
					
					       .MACRO FP  LABIL,MSB,LSB
						.MACRO  LABIL
						 	.WORD	MSB,LSB	
						.ENDM
					       .ENDM
					
					;Macros to tell value of variable during assembly
						.MACRO TELL VAR
							TELL2 VAR,\VAR
						.ENDM
					
						.MACRO TELL2 S,V
							.PRINT /S = /
							.PRINT /V
					/
						.ENDM
	PALX 222	04/29/75  10:55:58	PAGE 11
	HALHED PAL[HAL,HE]	PAGE 4 	DEFS -- standard definitions for HAL runtime routines

					;macros for handling tables & blocks
					
					       .MACRO	XX SYM			;Just gives SYM the next number.
						   .IFDF SYM
						       .IF1
						       .ERROR You are using SYM in two ways!!!
						       .ENDC
						   .ENDC
						    SYM == II
						    II == II+2
					       .ENDM
					
					.MACRO PUTLOC	ADR,VAL
						II==.
						.= ADR
						VAL
						.=II
					.ENDM
					
					.MACRO TT INX,VAL
						.=II+INX
						VAL
					.ENDM
					
	PALX 222	04/29/75  10:55:58	PAGE 12
	GRAPHS PAL[HAL,HE]	PAGE 1 	DEFS -- standard definitions for HAL runtime routines

				COMMENT ⊗   VALID 00009 PAGES
				C REC  PAGE   DESCRIPTION
				C00001 00001
				C00002 00002	.SBTTL Graph routines
				C00003 00003	 NXTTIM
				C00004 00004	ROUTINE INVLDT,<ND>
				C00005 00005	ROUTINE CHANGE,<ND,VNEW>
				C00007 00006	ROUTINE GETVAL,<ND>
				C00008 00007	ROUTINE EVALND,<ND,T>
				C00010 00008	ROUTINE ADDCLC,<ND,CLC>
				C00011 00009	GET2WD & GET3WD (eventually go somewhere else)
				C00013 ENDMK
					C⊗;
	PALX 222	04/29/75  10:55:58	PAGE 13
	GRAPHS PAL[HAL,HE]	PAGE 2 	Graph routines

					.SBTTL Graph routines
					
					;Graph structure definitions
					;RHT 9/74
					
					;CELL LINKS
		000000				II==0
						XX	DATUM
						   .IFDF DATUM
						       .IF1
						       .ERROR You are using DATUM in two ways!!!
						       .ENDC
						   .ENDC
		000000				    DATUM == II
		000002				    II == II+2
						XX	LINKF
						   .IFDF LINKF
						       .IF1
						       .ERROR You are using LINKF in two ways!!!
						       .ENDC
						   .ENDC
		000002				    LINKF == II
		000004				    II == II+2
						XX	LINKB
						   .IFDF LINKB
						       .IF1
						       .ERROR You are using LINKB in two ways!!!
						       .ENDC
						   .ENDC
		000004				    LINKB == II
		000006				    II == II+2
					
					;GRAPH NODES
		000000				II==0
						XX	NXTGN		;CHAIN OF ALL GNODES IN THE WORLD
						   .IFDF NXTGN
						       .IF1
						       .ERROR You are using NXTGN in two ways!!!
						       .ENDC
						   .ENDC
		000000				    NXTGN == II
		000002				    II == II+2
						XX	PRVGN
						   .IFDF PRVGN
						       .IF1
						       .ERROR You are using PRVGN in two ways!!!
						       .ENDC
						   .ENDC
		000002				    PRVGN == II
	PALX 222	04/29/75  10:55:58	PAGE 14
	GRAPHS PAL[HAL,HE]	PAGE 2.1 	Graph routines

		000004				    II == II+2
						XX	INVMRK		;USED AS FLAG
						   .IFDF INVMRK
						       .IF1
						       .ERROR You are using INVMRK in two ways!!!
						       .ENDC
						   .ENDC
		000004				    INVMRK == II
		000006				    II == II+2
						XX	GNVAL		;POINTER AT VALUE
						   .IFDF GNVAL
						       .IF1
						       .ERROR You are using GNVAL in two ways!!!
						       .ENDC
						   .ENDC
		000006				    GNVAL == II
		000010				    II == II+2
						XX	GNDEPS		;DEPENDENT GRAPH NODES
						   .IFDF GNDEPS
						       .IF1
						       .ERROR You are using GNDEPS in two ways!!!
						       .ENDC
						   .ENDC
		000010				    GNDEPS == II
		000012				    II == II+2
						XX	GNCLCS		;CALCULATOR LIST (DBL LINKED)
						   .IFDF GNCLCS
						       .IF1
						       .ERROR You are using GNCLCS in two ways!!!
						       .ENDC
						   .ENDC
		000012				    GNCLCS == II
		000014				    II == II+2
						XX	GNCHGS		;CHANGE LIST
						   .IFDF GNCHGS
						       .IF1
						       .ERROR You are using GNCHGS in two ways!!!
						       .ENDC
						   .ENDC
		000014				    GNCHGS == II
		000016				    II == II+2
					
					;CALCULATOR CELL
		000000				II==0
						XX	NXTCLC		;LIST LINK
						   .IFDF NXTCLC
						       .IF1
						       .ERROR You are using NXTCLC in two ways!!!
						       .ENDC
	PALX 222	04/29/75  10:55:58	PAGE 15
	GRAPHS PAL[HAL,HE]	PAGE 2.2 	Graph routines

						   .ENDC
		000000				    NXTCLC == II
		000002				    II == II+2
						XX	NEEDED		;LIST OF NEEDED NODES
						   .IFDF NEEDED
						       .IF1
						       .ERROR You are using NEEDED in two ways!!!
						       .ENDC
						   .ENDC
		000002				    NEEDED == II
		000004				    II == II+2
						XX	FORM		;SOME SORT OF CODE TO EVAL
						   .IFDF FORM
						       .IF1
						       .ERROR You are using FORM in two ways!!!
						       .ENDC
						   .ENDC
		000004				    FORM == II
		000006				    II == II+2
					
					;CHANGER CELL
		000000				II==0
						XX	NXTCHG
						   .IFDF NXTCHG
						       .IF1
						       .ERROR You are using NXTCHG in two ways!!!
						       .ENDC
						   .ENDC
		000000				    NXTCHG == II
		000002				    II == II+2
						XX	CHGCOD
						   .IFDF CHGCOD
						       .IF1
						       .ERROR You are using CHGCOD in two ways!!!
						       .ENDC
						   .ENDC
		000002				    CHGCOD == II
		000004				    II == II+2
					
	PALX 222	04/29/75  10:55:58	PAGE 16
	GRAPHS PAL[HAL,HE]	PAGE 3 	Graph routines

					; NXTTIM
					;
					;	JSR	PC,NXTTIM
					;	
					;RETURNS TIME←TIME+1 IN R0
					;IF TIME GOES NEGATIVE THEN GOES THRU & SETS ALL POSITIVE MARK
					;CELLS TO NEGATIVE, & THEN SETS TIME TO 1
					
	000000	000000			TIME:	0
	000002	000000			GNODES:	0	;LIST OF ALL GRAPH NODES IN THE WORLD
					
	000004	005267	177770		NXTTIM:	INC	TIME		;TIME←TIME+1
	000010	016700	177764			MOV	TIME,R0
	000014	003371				BGT	TIME,NXT.RT	;OK?
	000016	016700	177760			MOV	GNODES,R0	;
	000022	001410				BEQ	NXTT.3		;DID WE HAVE ANY??
	000024	005760	000004		NXTT.1: TST	INVMRK(R0)	;YES
	000030	003402				BLE	NXTT.2		;WAS INVMRK POSITIVE
	000032	005460	000004			NEG	INVMRK(R0)	;YES, NEGATE IT
	000036	016000	000000		NXTT.2:	MOV	NXTGN(R0),R0	;GO ON TO NEXT
	000042	001370				BNE	NXTT.1		;IF ANY
	000044	005200			NXTT.3:	INC	R0		;R0←0+1
	000046	010067	177726			MOV	R0,TIME		;TIME IS 1 AGAIN
	000052	000207			NXT.RT:	RTS	PC
					
	PALX 222	04/29/75  10:55:58	PAGE 17
	GRAPHS PAL[HAL,HE]	PAGE 4 	Graph routines

					ROUTINE INVLDT,<ND>
					           .IFNB ND
		000000				    NNNN==0
						       .IRP II,<ND>		;Raise NNNN to twice the number of args.
							NNNN==NNNN+2
						       .ENDM
		000002					NNNN==NNNN+2
						       .IRP II,<ND>		;Assign each arg NNNN and decrease same.
							.IFDF II
							   .IF1 
							   	.ERROR Multiple definition for II
							   .ENDC
							.IFF
							    II == NNNN
							    NNNN == NNNN-2
							.ENDC
						       .ENDM
							.IFDF ND
							   .IF1 
							   	.ERROR Multiple definition for ND
							   .ENDC
							.IFF
							    ND == NNNN
							    NNNN == NNNN-2
							.ENDC
						   .ENDC
					INVLDT:
	000054	016500	000002			MOV	ND(RF),R0
	000060	004767	000002			JSR	PC,INVLR0
	000064	000205				RTS	RF
					
	000066	005760	000004		INVLR0:	TST	INVMRK(R0)	;IS IT DEAD YET?
	000072	001016				BNE	INVL.R		;ALREADY INVALID??
	000074	005360	000004		INVL.1:	DEC	INVMRK(R0)	;NO, MAKE IT SO
	000100	010246				MOV	R2,-(SP)	;SAFE REGISTER
	000102	016002	000010			MOV	GNDEPS(R0),R2	;DEPENDENTS
	000106	001407				BEQ	INVL.X		;IF ANY 
	000110	016200	000000		INVL.2:	MOV	DATUM(R2),R0	;GET A DEPENDENT
	000114	004767	177746			JSR	PC,INVLR0	;AND INVALIDATE IT
	000120	016202	000002			MOV	LINKF(R2),R2	;GO TO NEXT
	000124	001371				BNE	INVL.2		;IF ANY
	000126	012602			INVL.X:	MOV	(SP)+,R2	;GET BACK SCRATCH REGISTER
	000130	000207			INVL.R:	RTS	PC
					
	PALX 222	04/29/75  10:55:58	PAGE 18
	GRAPHS PAL[HAL,HE]	PAGE 5 	Graph routines

					ROUTINE CHANGE,<ND,VNEW>
					           .IFNB ND,VNEW
		000000				    NNNN==0
						       .IRP II,<ND,VNEW>		;Raise NNNN to twice the number of args.
							NNNN==NNNN+2
						       .ENDM
		000002					NNNN==NNNN+2
		000004					NNNN==NNNN+2
						       .IRP II,<ND,VNEW>		;Assign each arg NNNN and decrease same.
							.IFDF II
							   .IF1 
							   	.ERROR Multiple definition for II
							   .ENDC
							.IFF
							    II == NNNN
							    NNNN == NNNN-2
							.ENDC
						       .ENDM
							.IFDF ND
							   .IF1 
							   	.ERROR Multiple definition for ND
							   .ENDC
							.IFF
							    ND == NNNN
							    NNNN == NNNN-2
							.ENDC
							.IFDF VNEW
							   .IF1 
							   	.ERROR Multiple definition for VNEW
							   .ENDC
							.IFF
							    VNEW == NNNN
							    NNNN == NNNN-2
							.ENDC
						   .ENDC
					CHANGE:
	000132	016500	000002			MOV	ND(RF),R0	;THE NODE
	000136	004767	177724			JSR	PC,INVLR0	;INVALIDATE IT
	000142	016500	000002			MOV	ND(RF),R0	;SINCE NO PROMISES WERE MADE
	000146	010246				MOV	R2,-(SP)	;SAVE A COUPLE REGISTERS
	000150	010346				MOV	R3,-(SP)
	000152	016002	000006			MOV	GNVAL(R0),R2	;OLD VALUE
	000156	016560	000004	000006		MOV	VNEW(RF),GNVAL(R0) ;PUT AWAY NEW VALUE
	000164	016003	000014			MOV	GNCHGS(R0),R3	;CHANGERS
	000170	001414				BEQ	CH.XXX		;MAY BE ABOUT DONE
					CH.1:	CALL	CRTS,<R2,VOLD(RF)> ;***** ACTUALLY MUST CALL A CHANGE ROUT HERE
	000172	010546				MOV	RF,-(SP)	;Save RF
		006400				NNNN == 6400		;This is a MARK 0 instruction
						   .IFNB R2,VOLD(RF)
	PALX 222	04/29/75  10:55:58	PAGE 19
	GRAPHS PAL[HAL,HE]	PAGE 5.1 	Graph routines

						       .IRP II,<R2,VOLD(RF)>
							MOV	II,-(SP);Push an argument
							NNNN == NNNN+1	;Make NNNN the next MARK instruction.
						       .ENDM
	000174	010246					MOV	R2,-(SP);Push an argument
		006401					NNNN == NNNN+1	;Make NNNN the next MARK instruction.
CH.1+4		176	5	12	VOLD	UNDEFINED
	000176	016546	000000				MOV	VOLD(RF),-(SP);Push an argument
		006402					NNNN == NNNN+1	;Make NNNN the next MARK instruction.
						   .ENDC
	000202	012746	006402			MOV	#NNNN,-(SP)	;Push the mark instruction.
	000206	010605				MOV	SP,RF		;Set up the display in RF.
	000210	004767	000022			JSR	PC,CRTS		;Call the routine
	000214	016303	000000			MOV	NXTCHG(R3),R3	;CDR DOWN LIST
	000220	001364				BNE	CH.1
	000222	016500	000002		CH.XXX:	MOV	ND(RF),R0
	000226	005060	000004			CLR	INVMRK(R0)
	000232	012603				MOV	(SP)+,R3
	000234	012602				MOV	(SP)+,R2
	000236	000205			CRTS:	RTS	RF
	PALX 222	04/29/75  10:55:58	PAGE 20
	GRAPHS PAL[HAL,HE]	PAGE 6 	Graph routines

					ROUTINE GETVAL,<ND>
					           .IFNB ND
		000000				    NNNN==0
						       .IRP II,<ND>		;Raise NNNN to twice the number of args.
							NNNN==NNNN+2
						       .ENDM
		000002					NNNN==NNNN+2
						       .IRP II,<ND>		;Assign each arg NNNN and decrease same.
							.IFDF II
							   .IF1 
							   	.ERROR Multiple definition for II
							   .ENDC
							.IFF
							    II == NNNN
							    NNNN == NNNN-2
							.ENDC
						       .ENDM
							.IFDF ND
							   .IF1 
							   	.ERROR Multiple definition for ND
							   .ENDC
							.IFF
							    ND == NNNN
							    NNNN == NNNN-2
							.ENDC
						   .ENDC
					GETVAL:
	000240	016500	000002			MOV	ND(RF),R0
	000244	004767	000002			JSR	PC,GETVR0
	000250	000205				RTS	RF
					
	000252	005760	000004		GETVR0:	TST	INVMRK(R0)	;WAS IT VALID ALREADY
	000256	001414				BEQ	GETV.R		;JUST RETURN IF IT WAS
	000260	010046				MOV	R0,-(SP)	;SAVE EXTRA COPY FOR RANDOMNESS
	000262	010546				MOV	RF,-(SP)
	000264	010046				MOV	R0,-(SP)	;EVALNODE(ND,TIME←TIME+1)
	000266	004767	177512			JSR	PC,NXTTIM	
	000272	010046				MOV	R0,-(SP)
	000274	012746	006402			MOV	#MARK2,-(SP)
	000300	010605				MOV	SP,RF
	000302	004767	000010			JSR	PC,EVALND		
	000306	012600				MOV	(SP)+,R0	;GET NODE BACK
	000310	016000	000006		GETV.R:	MOV	GNVAL(R0),R0	;GET THE VALUE CELL
	000314	000207				RTS	PC		;RETURN
					
	PALX 222	04/29/75  10:55:58	PAGE 21
	GRAPHS PAL[HAL,HE]	PAGE 7 	Graph routines

					ROUTINE EVALND,<ND,T>
					           .IFNB ND,T
		000000				    NNNN==0
						       .IRP II,<ND,T>		;Raise NNNN to twice the number of args.
							NNNN==NNNN+2
						       .ENDM
		000002					NNNN==NNNN+2
		000004					NNNN==NNNN+2
						       .IRP II,<ND,T>		;Assign each arg NNNN and decrease same.
							.IFDF II
							   .IF1 
							   	.ERROR Multiple definition for II
							   .ENDC
							.IFF
							    II == NNNN
							    NNNN == NNNN-2
							.ENDC
						       .ENDM
							.IFDF ND
							   .IF1 
							   	.ERROR Multiple definition for ND
							   .ENDC
							.IFF
							    ND == NNNN
							    NNNN == NNNN-2
							.ENDC
							.IFDF T
							   .IF1 
							   	.ERROR Multiple definition for T
							   .ENDC
							.IFF
							    T == NNNN
							    NNNN == NNNN-2
							.ENDC
						   .ENDC
					EVALND:
	000316	016500	000002			MOV	ND(RF),R0
	000322	016001	000004			MOV	INVMRK(R0),R1	;IF INVMRK = 0 
	000326	001460				BEQ	EV.RTS		;THEN RETURN
	000330	020165	000004			CMP	R1,T(RF)	;IF INVMRK=T
	000334	001455				BEQ	EV.RTS		;THEN RETURN
	000336	010246				MOV	R2,-(SP)	;SAVE REGISTERS
	000340	010346				MOV	R3,-(SP)
	000342	016002	000012			MOV	GNCLCS(R0),R2	;CALCULATORS
	000346	001446				BEQ	EV.XXX		;IF ANY
	000350	016203	000002		EV.CLP:	MOV	NEEDED(R2),R3	;NEEDED LIST
	000354	001422				BEQ	EV.NOK		;ALL NEEDS MET YET?
					EV.NLP: CALL	EVALND,<DATUM(R3),T(RF)> ;NO, GET NEXT
	000356	010546				MOV	RF,-(SP)	;Save RF
	PALX 222	04/29/75  10:55:58	PAGE 22
	GRAPHS PAL[HAL,HE]	PAGE 7.1 	Graph routines

		006400				NNNN == 6400		;This is a MARK 0 instruction
						   .IFNB DATUM(R3),T(RF)
						       .IRP II,<DATUM(R3),T(RF)>
							MOV	II,-(SP);Push an argument
							NNNN == NNNN+1	;Make NNNN the next MARK instruction.
						       .ENDM
	000360	016346	000000				MOV	DATUM(R3),-(SP);Push an argument
		006401					NNNN == NNNN+1	;Make NNNN the next MARK instruction.
	000364	016546	000004				MOV	T(RF),-(SP);Push an argument
		006402					NNNN == NNNN+1	;Make NNNN the next MARK instruction.
						   .ENDC
	000370	012746	006402			MOV	#NNNN,-(SP)	;Push the mark instruction.
	000374	010605				MOV	SP,RF		;Set up the display in RF.
	000376	004767	177714			JSR	PC,EVALND		;Call the routine
	000402	016300	000000			MOV	DATUM(R3),R0	;SEE IF NEED WAS MET?
	000406	005760	000004			TST	INVMRK(R0)	;DID WE WIN
	000412	001021				BNE	EV.NXC		;BRANCH IF STILL NOT VALID
	000414	016303	000002			MOV	LINKF(R3),R3	;TRY NEXT NEEDED
	000420	001356				BNE	EV.NLP		
					EV.NOK:	CALL	EVLCLC,<R2>	;EVALUATE CALCULATOR
	000422	010546				MOV	RF,-(SP)	;Save RF
		006400				NNNN == 6400		;This is a MARK 0 instruction
						   .IFNB R2
						       .IRP II,<R2>
							MOV	II,-(SP);Push an argument
							NNNN == NNNN+1	;Make NNNN the next MARK instruction.
						       .ENDM
	000424	010246					MOV	R2,-(SP);Push an argument
		006401					NNNN == NNNN+1	;Make NNNN the next MARK instruction.
						   .ENDC
	000426	012746	006401			MOV	#NNNN,-(SP)	;Push the mark instruction.
	000432	010605				MOV	SP,RF		;Set up the display in RF.
	000434	004767	000032			JSR	PC,EVLCLC		;Call the routine
	000440	016501	000002			MOV	ND(RF),R1	;PICK UP ND
	000444	010061	000006			MOV	R0,GNVAL(R1)	;SAVE VALUE IN IT
	000450	005061	000004			CLR	INVMRK(R1)	;REVALIDATE THE NODE
	000454	000403				BR	EV.XXX		;EXIT
	000456	016202	000000		EV.NXC:	MOV	NXTCLC(R2),R2	;TRY NEXT CALCULATOR
	000462	001332				BNE	EV.CLP		;IF ANY TO TRY
	000464	012603			EV.XXX:	MOV	(SP)+,R3	;RESTORE ACS
	000466	012602				MOV	(SP)+,R2
	000470	000205			EV.RTS:	RTS	RF		;RETURN
					
					ROUTINE EVLCLC,<CLC>
					           .IFNB CLC
		000000				    NNNN==0
						       .IRP II,<CLC>		;Raise NNNN to twice the number of args.
							NNNN==NNNN+2
						       .ENDM
	PALX 222	04/29/75  10:55:58	PAGE 23
	GRAPHS PAL[HAL,HE]	PAGE 7.2 	Graph routines

		000002					NNNN==NNNN+2
						       .IRP II,<CLC>		;Assign each arg NNNN and decrease same.
							.IFDF II
							   .IF1 
							   	.ERROR Multiple definition for II
							   .ENDC
							.IFF
							    II == NNNN
							    NNNN == NNNN-2
							.ENDC
						       .ENDM
							.IFDF CLC
							   .IF1 
							   	.ERROR Multiple definition for CLC
							   .ENDC
							.IFF
							    CLC == NNNN
							    NNNN == NNNN-2
							.ENDC
						   .ENDC
					EVLCLC:
	000472	000205				RTS	RF
	PALX 222	04/29/75  10:55:58	PAGE 24
	GRAPHS PAL[HAL,HE]	PAGE 8 	Graph routines

					ROUTINE ADDCLC,<ND,CLC>
					           .IFNB ND,CLC
		000000				    NNNN==0
						       .IRP II,<ND,CLC>		;Raise NNNN to twice the number of args.
							NNNN==NNNN+2
						       .ENDM
		000002					NNNN==NNNN+2
		000004					NNNN==NNNN+2
						       .IRP II,<ND,CLC>		;Assign each arg NNNN and decrease same.
							.IFDF II
							   .IF1 
							   	.ERROR Multiple definition for II
							   .ENDC
							.IFF
							    II == NNNN
							    NNNN == NNNN-2
							.ENDC
						       .ENDM
							.IFDF ND
							   .IF1 
							   	.ERROR Multiple definition for ND
							   .ENDC
							.IFF
							    ND == NNNN
							    NNNN == NNNN-2
							.ENDC
							.IFDF CLC
							   .IF1 
							   	.ERROR Multiple definition for CLC
							   .ENDC
							.IFF
							    CLC == NNNN
							    NNNN == NNNN-2
							.ENDC
						   .ENDC
					ADDCLC:
	000474	010246				MOV	R2,-(SP)	;SAVE A REGISTER
	000476	010346				MOV	R3,-(SP)	;SAVE A REGISTER
	000500	016503	000002			MOV	ND(RF),R3	;THE NODE
	000504	016501	000241			MOV	CLC(RF),R1	;THE CALCULATOR
	000510	016361	000012	000000		MOV	GNCLCS(R3),NXTCLC(R1) ;CURRENT CALCULATOR LIST
	000516	016102	000002			MOV	NEEDED(R1),R2	;LIST OF NEEDED NODES
	000522	001416				BEQ	ACLC.X		;ALL DONE
	000524	004767	000152		ACLC.1:	JSR	PC,GET2WD	;GET A TWO-WORD CELL
	000530	010360	000000			MOV	R3,DATUM(R0)	;THIS NODE IS NOW A DEPENDENT OF
	000534	016201	000000			MOV	DATUM(R2),R1	;THE NEEDED NODE
	000540	016160	000010	000002		MOV	GNDEPS(R1),LINKF(R0) ;ADD IT TO THE DEPENDENTS LIST
	000546	010061	000010			MOV	R0,GNDEPS(R1)	;
	000552	016202	000002			MOV	LINKF(R2),R2	;NEXT NEEDED NODE
	PALX 222	04/29/75  10:55:58	PAGE 25
	GRAPHS PAL[HAL,HE]	PAGE 8.1 	Graph routines

	000556	001362				BNE	ACLC.1		;
	000560	012603			ACLC.X:	MOV	(SP)+,R3	;RESTORE ACS
	000562	012602				MOV	(SP)+,R2
	000564	000205				RTS	R5
					
	PALX 222	04/29/75  10:55:58	PAGE 26
	GRAPHS PAL[HAL,HE]	PAGE 9 	Graph routines

					;GET2WD & GET3WD (eventually go somewhere else)
					
W2SPC		566	9	3	SPC	UNDEFINED
W2SPC		566	9	3	CONSECUTIVE TERMS
	000566	000000			W2SPC:	SPC	W2ID,MP2WD,2,20,1,20,25
W3SPC		570	9	4	SPC	UNDEFINED
W3SPC		570	9	4	CONSECUTIVE TERMS
	000570	000000			W3SPC:	SPC	W3ID,MP3WD,3,20,1,20,25
					
MP2WD		572	9	6	TAG	UNDEFINED
	000572	105760	000000		MP2WD:	TSTB	TAG(R0)
	000576	001022				BNE	MPRTS		;ALREADY DID THIS ONE
	000600	004775	000002			JSR	PC,@2(RF)	;
	000604	010246				MOV	R2,-(SP)	;
	000606	010002				MOV	R0,R2		;SAVE RESULT OF ROUT
	000610	016200	000000		MPDLF:	MOV	DATUM(R2),R0	;DO DATUM
MPDLF+4		614	9	12	MARKR0	UNDEFINED
	000614	004767	177160			JSR	PC,MARKR0	;
	000620	010062	000000			MOV	R0,DATUM(R2)	;
	000624	016200	000002			MOV	LINKF(R2),R0	;DO LINKF
MPDLF+20	630	9	15	MARKR0	UNDEFINED
	000630	004767	177144			JSR	PC,MARKR0	;A LONG LIST WILL PDLOV (ALAS)
	000634	010062	000002			MOV	R0,LINKF(R2)	; BUT WE DONT HAVE ANY LONG LISTS (I HOPE)
	000640	010200				MOV	R2,R0		;RETURN VALUE
	000642	012602				MOV	(SP)+,R2	;
	000644	000207			MPRTS:	RTS	PC
					
MP3WD		646	9	21	TAG	UNDEFINED
	000646	105760	000000		MP3WD:	TSTB	TAG(R0)		;DID WE DO THIS
	000652	001374				BNE	MPRTS		;YES
	000654	004775	000002			JSR	PC,@2(RF)	;
	000660	010246				MOV	R2,-(SP)
	000662	010002				MOV	R0,R2
	000664	016200	000004			MOV	LINKB(R2),R0	;DO LINKB
MP3WD+22	670	9	27	MARKR0	UNDEFINED
	000670	004767	177104			JSR	PC,MARKR0
	000674	010062	000004			MOV	R0,LINKB(R2)	;
	000700	000743				BR	MPDLF		;GO DO DATUM & LINKF
					
					; GET A TWO-WORD CELL (OF POINTERS)
GET2WD		702	9	32	W2ID	UNDEFINED
	000702	012700	000000		GET2WD:	MOV	#W2ID,R0
GET2WD+4	706	9	33	GETBLK	UNDEFINED
	000706	000167	177066			JMP	GETBLK
					
GET3WD		712	9	35	W3ID	UNDEFINED
	000712	012700	000000		GET3WD:	MOV	#W3ID,R0
GET3WD+4	716	9	36	GETBLK	UNDEFINED
	000716	000167	177056			JMP	GETBLK
	PALX 222	04/29/75  10:55:58	PAGE 27
	GRAPHS PAL[HAL,HE]	PAGE 9.1 	Graph routines

GET3WD+10	722	9	37	NO END STMT
					
	PALX 222	04/29/75  10:55:58	PAGE 28
	GRAPHS PAL[HAL,HE]	PAGE 9 	***SYMBOL TABLE***      

	AC0	000000RH		INVL.R	000130		STRT11	000500	
	AC1	000001RH		INVL.X	000126		T	000004H	
	AC2	000002RH		INVLDT	000054		TAG	000000U	
	AC3	000003RH		INVLR0	000066		TIME	000000	
	AC4	000004RH		INVMRK	000004H		VNEW	000004H	
	AC5	000005RH		KBIR	177562		VOLD	000000U	
	ACLC.1	000524		KBIS	177560		W2ID	000000U	
	ACLC.X	000560		KBOR	177566		W2SPC	000566	
	ADDCLC	000474		KBOS	177564		W3ID	000000U	
	CH.1	000172		LINKB	000004H		W3SPC	000570	
	CH.XXX	000222		LINKF	000002H	
	CHANGE	000132		MARK0	006400H	
	CHGCOD	000002H		MARK1	006401H	
	CLKCNT	172544		MARK2	006402H	
	CLKS	172540		MARK3	006403H	
	CLKSET	172542		MARK4	006404H	
	CLKTRP	000104H		MARK5	006405H	
	CRTS	000236		MARKR0	000000U	
	DATUM	000000H		MP2WD	000572	
	ERRTRP	000004H		MP3WD	000646	
	EV.CLP	000350		MPDLF	000610	
	EV.NLP	000356		MPRTS	000644	
	EV.NOK	000422		ND	000002H	
	EV.NXC	000456		NEEDED	000002H	
	EV.RTS	000470		NNNN	000004H	
	EV.XXX	000464		NXT.RT	000052	
	EVALND	000316		NXTCHG	000000H	
	EVLCLC	000472		NXTCLC	000000H	
	FLOAT	000001H		NXTGN	000000H	
	FORM	000004H		NXTT.1	000024	
	GET2WD	000702		NXTT.2	000036	
	GET3WD	000712		NXTT.3	000044	
	GETBLK	000000U		NXTTIM	000004	
	GETV.R	000310		OBUF	000160H	
	GETVAL	000240		PC	000007R	
	GETVR0	000252		PRVGN	000002H	
	GNCHGS	000014H		PS	177776	
	GNCLCS	000012H		R0	000000R	
	GNDEPS	000010H		R1	000001R	
	GNODES	000002		R2	000002R	
	GNVAL	000006H		R3	000003R	
	HCOR	077776		R4	000004R	
	IBUF	000150H		R5	000005R	
	II	000004H		RF	000005RH	
	ILGINS	000010H		RUG	050000	
	INVL.1	000074		SP	000006R	
	INVL.2	000110		SPC	000000U	
	PALX 222	04/29/75  10:55:58	PAGE 29
	GRAPHS PAL[HAL,HE]	PAGE 9 	***SYMBOL TABLE***      


24 ERRORS DETECTED

1.5 WDS AVG INSN LENGTH

9 SECONDS RUN-TIME